Programming Principles & Practice Using C++
BS.5 Errors
Should we check for errors when we call a function or within the function called (callee)?
Within the callee! Fewer checks! Less brittle!
How should we report errors when we find them?
Return a bad value? No! Then we would have to check for it whenever the function is called!
[ANNOTATION:
BY 'Unknown Author'
ON '2016-11-01T17:07:59'
NOTE: 'class Bad_area{};'
NOTE: 'int area(int length, int width) {'
NOTE: ' if (length<=0 || width<=0) throw Bad_area{};'
NOTE: ' return length * width;'
NOTE: '}']Exceptions! Throw an exception when there is an error: Either the calling code catches it and deals with it, or the program terminates and reports the exception.
Bad input is detected by following up a cin >> call with an if (!cin) as this checks whether the last cin call was successful.
If you throw runtime_error(str) then the message for the caught error can be accessed at e.what()
When we catch errors we have to "pass the exception by reference" like catch(exception& e)
[ANNOTATION:
BY 'Unknown Author'
ON '2016-11-01T17:10:05'
NOTE: 'Alternative for-loop syntax;'
NOTE: 'for(int i; cin >> i;)'
NOTE: 'for (int number : numbers)']
Use pre-conditions (check that input is sane) and post-conditions (check that output is sane)
BS.6 Writing a Program